This invention relates to the field of computer systems. More particularly, a system and method are provided for verifying end-to-end packet classification by an input/output component.
Before releasing a communication device or component, such as a network interface circuit, communication bus, disk controller, and so on, it is essential to verify its proper operation. Traditionally, to test the operation of a communication device a static set of predetermined inputs or stimuli would be applied to the component in a strict order to determine if its output matched what was expected. Hooks might be placed in the device being tested to obtain direct feedback regarding its operation.
To test an input/output component's classification of packets, a static set of packet inputs would be assembled and fed to the component. However, this set of input is generally only useful while the component applies one particular DMA (Direct Memory Access) policy, which specifies which DMA engine should be invoked to process a packet, based on the packet's composition.
When a different policy is to be tested, a different set of input packets must be assembled and applied. To fully test the component with various policies, a very large number of packets (e.g., thousands) may be needed, which will have to be pre-generated before the tests can commence. In addition, a substantial amount of storage may be needed to store the packets, and testing must be halted while one policy is exchanged for another.
This testing environment does not reflect an actual operating environment of the input/output device. In live operation, it may receive packets that have a far wider range of attributes than the predetermined static stimuli applied during verification. And further, it may be desirable to dynamically modify or replace its operating policy (e.g., DMA policy). Even if the device is capable of dynamic policy modification, if it has not been tested in this mode there is a substantial risk that the component will not function correctly. Thus, traditional verification environments and methods often fail to adequately test input/output components and do not allow for dynamic alteration of an operating policy without halting the testing.